问题1:android java.net.UnknownHostException: Unable to resolve host "...": No address associated 错误

我在android开发的时候经常会遇到这个错误,一般来说,造成这种错误的最普遍情况有两种:

1.android设备网络连接没打开,例如3G网络和WIFI网络

所以,如果遇到这种错误时,请先查看网络是否已正常连接.

2.Manifest文件没有标明网络访问权限

如果确认网络已经正常连接并且还是出这种错误的话,那么请看下你的Manifest文件是否标明应用需要网络访问权限,如果没标明的话,也访问不了网络,也会造成这种情况的.

问题2:OOM(内存溢出)和Memory Leak(内存泄露)有什么关系?

OOM可能是因为Memory Leak,也可能是你的应用本身就比较耗内存(比如图片浏览型的,或者应用本身的设计有问题)。所以,出现OOM不一定是Memory Leak。

同样,Memory Leak也不一定就会导致OOM,如果泄露的速度很慢,可能还没用完可用内存应用就被重启了,那就不会OOM咯。当然了,有bug解决了最好。

问题3:什么是shallow heap与retained heap?

shallow heap:你自身占了多少内存,比如你有一个int属性,就占4字节。不包括你引用的其他对象。

retained heap:如果你被销毁,总共会释放多少内存。这些因你存在被占据的空间就是retained heap。

问题4:Android内存泄漏的各种原因

1.资源对象没关闭造成的内存泄漏
2.构造Adapter时,没有使用缓存的convertView
3.Bitmap对象不在使用时调用recycle()释放内存
4.试着使用关于application的context来替代和activity相关的context
5.注册没取消造成的内存泄漏
6.集合中对象没清理造成的内存泄漏

问题5:Map<> 字典数据不一致

描述:将一组数据存入Map,Map testMap = new HashMap();
Android 5.0及以上系统与以下取出的数据不一致.
原因:大致判断为HashMap() API变化导致.查看官方文档,果然是…
解决方案:
使用TreeMap()
HashMap:适用于在Map中插入、删除和定位元素
Treemap:适用于按自然顺序或自定义顺序遍历键(key)

问题6:拍照后Activity重新进入(页面重新加载)

描述:在App中,一般会使用到拍照上传功能.使用了一个临时(多张照片)的全局变量存储照片地址,发现拍照完成后,页面数据重置了…
原因:拍照过程中,我们会改变手机的方向,即横拍与竖拍.导致Activity监测到旋转,重新计算内容大小,onCreate()
解决方案:AndroidManifest.xml中,对应的Activity 添加如下配置
android:configChanges="orientation|screenSize"
如需处理旋转事件:重写onConfigurationChanged()

问题7:R.java文件不会自动创建

第1种方法:右击工程->选择Android Tools->选择Fix Project Properties
第2种方法:右击工程->选择Properties->选择 Android->Apply
第3种方法:可能是layout内有xml报错,无法自动生成。

问题8:SQLite常见错误

1. android.database.sqlite.SQLiteException: unable to close due to unfinalised statements

这个错误翻译过来就是:不能关闭数据库由于未完成的语句。
我从网上查了一下,最可能的原因是:你在操作sqlite数据库时使用多线程了,但sqlite数据库是不支持多线程操作,所以你必须实现多线程同步的机制。

2.android.database.sqlite.SQLiteConstraintException: error code 19: constraint failed

约束失败,导致这类错误,原因一般有两个:

1)插入的数据有一个是主键,而且插入的主键相同;
2)插入的数据有一条数据为空,而数据库中定义不能为空,也会导致这样的错误;

问题9:自定义title栏。

首先要在values->styles中定义一个style,然后在mainfest文件中设置android:theme.
最后在Activity中按照这个顺序写:
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_CUSTOM_TITLE);
setContentView(R.layout.activity_main);
getWindow().setFeatureInt(Window.FEATURE_CUSTOM_TITLE, R.layout.title_layout);

问题10:SQLite isFirst和isBeforeFirst方法的区别:

看下面一段代码
Cursor c = queryTheCursor(type);
if(c.moveToLast())
while (!c.isBeforeFirst()) {
String tmpContent = new String();
tmpContent = c.getString(c.getColumnIndex("content"));
contents.add(tmpContent);
c.moveToPrevious();
}
c.close();
代码的作用是逆序输出表中的内容,第三行如果用的是isFirst()的话就无法输出第一行,正确做发是用isBeforeFirst()。

问题11:synchronized引发了 java.util.ConcurrentModificationException

如果多个线程同时访问一个 ArrayList 实例,而其中至少一个线程从结构上修改了列表,那么它必须 保持外部同步。
解决方法:初始化的时候 将ArrayList改为CopyOnWriteArrayList;
原理:
JAVA中将引用从一个对象移到另外一个对象不需要消耗CPU时间,可以看做是一个原子操作。
JAVA中如果一个对象仍旧存在引用,则不会被CG回收。
CopyOnWriteArrayList就是根据以上两个特点,在列表有更新时直接将原有的列表复制一份,并再新的列表上进行更新操作,完成后再将引用移到新的列表上。旧列表如果仍在使用中(比如遍历)则继续有效。如此一来就不会出现修改了正在使用的对象的情况(读和写分别发生在两个对象上),同时读操作也不必等待写操作的完成,免去了锁的使用加快了读取速度。

问题12:Couldn't read row 0, col -1 from CursorWindow. Make sure the Cursor is initialized correctly before accessing data from it.

错误1:请求的字段在数据库的表中不存在,一般是大小写没写对;
错误2:编程的中途改变表的字段,实际字段并没有改变,解决方法是卸载当前版本,再安装调试。

问题13:交互性的button定义的方法:

首先是准备好按钮不同状态的图片
然后 在res/drawable中定义selector的xml文件

最后Button的background属性中设置

问题14:最简单的Root 模拟器的方法

启动一个模拟器,开始-运行-输入cmd,打开dos,依次输入
adb shell
mount -o remount,rw -t yaffs2 /dev/block/mtdblock3 /system
cd /system/bin
cat sh > su
chmod 4755 su
su
即可获得root权限

results matching ""

    No results matching ""